#include "GpioInitHelper.h"

//Port Config
void App_PortCfg(void) {
  /* GPIO initialize */
  stc_gpio_init_t stcGpioInit;
  /* PC14 set to XTAL32-OUT */
  (void) GPIO_StructInit(&stcGpioInit);
  stcGpioInit.u16PinAttr = PIN_ATTR_ANALOG;
  (void) GPIO_Init(GPIO_PORT_C, GPIO_PIN_14, &stcGpioInit);

  /* PC15 set to XTAL32-IN */
  (void) GPIO_StructInit(&stcGpioInit);
  stcGpioInit.u16PinAttr = PIN_ATTR_ANALOG;
  (void) GPIO_Init(GPIO_PORT_C, GPIO_PIN_15, &stcGpioInit);

  /* PH0 set to XTAL-EXT/XTAL-OUT */
  (void) GPIO_StructInit(&stcGpioInit);
  stcGpioInit.u16PinAttr = PIN_ATTR_ANALOG;
  (void) GPIO_Init(GPIO_PORT_H, GPIO_PIN_00, &stcGpioInit);

  /* PH1 set to XTAL-IN */
  (void) GPIO_StructInit(&stcGpioInit);
  stcGpioInit.u16PinAttr = PIN_ATTR_ANALOG;
  (void) GPIO_Init(GPIO_PORT_H, GPIO_PIN_01, &stcGpioInit);

  /* PB10 set to GPIO-Output */
  (void) GPIO_StructInit(&stcGpioInit);
  stcGpioInit.u16PinDir = PIN_DIR_OUT;
  stcGpioInit.u16PinDrv = PIN_HIGH_DRV;
  stcGpioInit.u16PinAttr = PIN_ATTR_DIGITAL;
  (void) GPIO_Init(LED_RUN_PORT, LED_RUN_PIN, &stcGpioInit);

  /* PB14 set to GPIO-Output */
  // spi3 cs
  (void) GPIO_StructInit(&stcGpioInit);
  stcGpioInit.u16PinDir = PIN_DIR_OUT;
  stcGpioInit.u16PinDrv = PIN_HIGH_DRV;
  stcGpioInit.u16PinAttr = PIN_ATTR_DIGITAL;
  stcGpioInit.u16PinState = PIN_STAT_SET;
  (void) GPIO_Init(GPIO_PORT_B, GPIO_PIN_15, &stcGpioInit);

  /* PA10 set to EIRQ10 */
  (void) GPIO_StructInit(&stcGpioInit);
  stcGpioInit.u16ExtInt = PIN_EXTINT_ON;
  stcGpioInit.u16PullUp = PIN_PU_ON;
  (void) GPIO_Init(RTC_INT_PORT, RTC_INT_PIN, &stcGpioInit);

  /* PB6 set to EIRQ6 */
  (void) GPIO_StructInit(&stcGpioInit);
  stcGpioInit.u16ExtInt = PIN_EXTINT_ON;
  (void) GPIO_Init(RN7326E_INT_PORT, RN7326E_INT_PIN, &stcGpioInit);

  /* PB7 set to GPIO-Output */
  (void) GPIO_StructInit(&stcGpioInit);
  stcGpioInit.u16PinDir = PIN_DIR_OUT;
  stcGpioInit.u16PinAttr = PIN_ATTR_DIGITAL;
  stcGpioInit.u16PinState = PIN_STAT_SET;
  (void) GPIO_Init(RN7326E_RST_PORT, RN7326E_RST_PIN, &stcGpioInit);

  GPIO_SetFunc(GPIO_PORT_H, GPIO_PIN_02, GPIO_FUNC_33);//USART3-RX

  GPIO_SetFunc(GPIO_PORT_C, GPIO_PIN_13, GPIO_FUNC_32);//USART3-TX

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_00, GPIO_FUNC_42);//SPI1-SS0

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_01, GPIO_FUNC_43);//SPI1-SCK

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_02, GPIO_FUNC_41);//SPI1-MISO

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_03, GPIO_FUNC_40);//SPI1-MOSI

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_04, GPIO_FUNC_46);//SPI2-SS0

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_05, GPIO_FUNC_47);//SPI2-SCK

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_06, GPIO_FUNC_45);//SPI2-MISO

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_07, GPIO_FUNC_44);//SPI2-MOSI

  //GPIO_SetFunc(GPIO_PORT_B,GPIO_PIN_00,GPIO_FUNC_34);//USART1-RTS

  GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_01, GPIO_FUNC_33);//USART1-RX

  GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_02, GPIO_FUNC_32);//USART1-TX

  GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_12, GPIO_FUNC_40);//SPI3-MOSI

  GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_13, GPIO_FUNC_41);//SPI3-MISO

  GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_14, GPIO_FUNC_43);//SPI3-SCK

  //GPIO_SetFunc(GPIO_PORT_B,GPIO_PIN_15,GPIO_FUNC_42);//SPI3-SS0

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_08, GPIO_FUNC_49);//I2C1-SCL

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_09, GPIO_FUNC_10);//USBFS-VBUS

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_11, GPIO_FUNC_10);//USBFS-DM

  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_12, GPIO_FUNC_10);//USBFS-DP

  GPIO_SetDebugPort(GPIO_PIN_TDI, DISABLE);
  GPIO_SetFunc(GPIO_PORT_A, GPIO_PIN_15, GPIO_FUNC_48);//I2C1-SDA

  GPIO_SetDebugPort(GPIO_PIN_TRST, DISABLE);
  GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_04, GPIO_FUNC_36);//USART4-TX

  GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_05, GPIO_FUNC_37);//USART4-RX

  GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_08, GPIO_FUNC_48);//I2C3-SDA

  GPIO_SetFunc(GPIO_PORT_B, GPIO_PIN_09, GPIO_FUNC_49);//I2C3-SCL
}
